import java.io.Serializable;

/**
 * 员工基类，包含所有员工的公共属性和抽象方法
 */
abstract class Employee implements Serializable {
    protected String name;       // 员工姓名
    protected String empId;      // 工号
    protected String username;   // 登录账号（唯一）
    protected String password;   // 登录密码

    // 构造方法
    public Employee(String name, String empId, String username, String password) {
        this.name = name;
        this.empId = empId;
        this.username = username;
        this.password = password;
    }

    // 抽象方法：计算薪资
    public abstract double calculateSalary() throws InvalidWorkingHoursException;

    // 抽象方法：生成个人工资条
    public abstract String generatePaySlip();

    // Getter方法
    public String getName() { return name; }
    public String getEmpId() { return empId; }
    public String getUsername() { return username; }
    public String getPassword() { return password; }

    // Setter方法（用于修改账号和密码）
    public void setUsername(String username) { this.username = username; }
    public void setPassword(String password) { this.password = password; }
}